#include <stdio.h>
#include <stdlib.h>


typedef struct Data
{
    int w;
    int v;
}DATA;

int n;
int c;

int  max(int a,int b)
{
   return a>b?a:b;
}
void print(int dp[][c+1],DATA data[],int i,int j)
{
    if(i==0)
        return;
    if(dp[i][j]==dp[i-1][j]) {
        print(dp, data, i - 1, j);
        printf("0");
    }
        else
    {
        print(dp,data,i-1,j-data[i].w);
        printf("1");
    }
}


int main()
{
    scanf("%d",&n);
    DATA data[n+1];
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&data[i].w);
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&data[i].v);
    }
    scanf("%d",&c);
    int dp[n+1][c+1];
    for(int i=0;i<=n;i++)
    {
        for(int j=0;j<=c;j++)
        {
            dp[i][j]=0;
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=c;j++)
        {
            if(data[i].w<=j)
            {
                dp[i][j]=max(data[i].v+dp[i-1][j-data[i].w],dp[i-1][j]);
            }
            else
            {
                dp[i][j]=dp[i-1][j];
            }
        }
    }
//    for(int i=0;i<=n;i++)
//    {
//        for(int j=0;j<=c;j++)
//        {
//            printf("%d\t",dp[i][j]);
//        }
//        printf("\n");
//    }
    print(dp,data,n,c);
    printf("\n");
    printf("%d",dp[n][c]);

}